function geServices(plat = 'weixin'): Promise<any> {
  return new Promise((resolve, reject) => {
    plus.share.getServices(service => {
      const platService = service.find(i => i.id === plat)
      if (!platService) {
        // 没有获取到微信分享服务
        reject(new Error('没有获取到微信分享服务'))
      }
      resolve(platService)
    }, _err => {
      reject(_err)
    })
  })
}

// 跳转微信客服
export function toWxService(corpid: any, kfid: any) {
  return new Promise((resolve, reject) => {
    geServices('weixin').then((service) => {
      // 跳转企业微信客服
      service.openCustomerServiceChat({
        corpid,
        url: `https://work.weixin.qq.com/kfid/${kfid}`
      }, resolve, reject)
    }).catch(reject)
  })
}
// 跳转微信分享
export function toWxShare({ title, imageUrl, originId, path, envVersion, webUrl }: any) {
  //   const title = '这是分享标题' // 分享标题
  //   const imageUrl = 'https://web-assets.dcloud.net.cn/unidoc/zh/dn.png' // 分享图片
  //   const originId = 'gh_xxxxxxxxxxx' // 微信小程序原始id
  //   const path = 'pages/index/index' // 小程序页面路径
  //   const envVersion = 'release' // 小程序版本 - 正式版: release，开发版: develop，体验版: trial
  //   const webUrl = 'https://www.dcloud.io/hbuilderx.html' // 兼容低版本的网页链接
  return new Promise((resolve, reject) => {
    // 跳转微信分享
    uni.share({
      scene: 'WXSceneSession',
      type: 5,
      imageUrl,
      title,
      miniProgram: {
        id: originId,
        path,
        type: envVersion,
        webUrl
      },
      success: resolve,
      fail: reject
    })
  })
}
export function wxAuth(): Promise<{ code: string }> {
  return new Promise((resolve, reject) => {
    uni.login({
      provider: 'weixin',
      onlyAuthorize: true,
      success: resolve,
      fail: reject
    })
  })
}
// 跳转微信登陆
export async function toLoginWx() {
  const { code } = await wxAuth()// 微信登录凭证
  console.log('微信登录成功 =>', code)
}
/**
 * 跳转微信支付
 *appid: 'wx499********7c70e', // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
 *noncestr: 'c5s******3iv', // 随机字符串
 *package: 'Sign=WXPay', // 固定值
 *partnerid: '148*****52', // 微信支付商户号
 *prepayid: 'wx202254********************fbe90000', // 统一下单订单号
 *timestamp: 1597935292, // 时间戳（单位：秒）
 *sign: 'A842B*****************2D5A0' // 签名，这里用的 MD5/RSA 签名
 * @param param0 支付参数
 * @returns {Promise<any>}
 */
export function toWxPayment({ appid, noncestr, pkg, partnerid, prepayid, timestamp, sign }: any) {
  return new Promise((resolve, reject) => {
    uni.requestPayment({
      provider: 'wxpay',
      orderInfo: {
        appid, // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
        noncestr, // 随机字符串
        package: pkg, // 固定值
        partnerid, // 微信支付商户号
        prepayid, // 统一下单订单号
        timestamp, // 时间戳（单位：秒）
        sign // 签名，这里用的 MD5/RSA 签名
      },
      success: resolve,
      fail: reject
    })
  })
}
/**
 * app跳转微信小程序
 * @param originId 微信小程序原始id
 * @param path 小程序页面路径
 * @param envVersion 0-正式版； 1-测试版； 2-体验版
 * @param webUrl 兼容低版本的网页链接
 * @returns {Promise<any>}
 */
export function appToWxMiniProgram({ originId, path, envVersion, webUrl }: any) {
  return new Promise((resolve, reject) => {
    geServices('weixin').then((service) => {
      // 跳转微信小程序
      service.openMiniProgram({
        id: originId,
        path,
        type: envVersion,
        webUrl
      }, resolve, reject)
    }).catch(reject)
  })
}
/**
 * 跳转抖音小程序
 * @param dyAppId
 * @param dyPath
 */
export function toDyMiniProgram(dyAppId: string, dyPath: string) {
  //   const dyAppId = 'tt**********'
  //   const dyPath = 'pages/index/index?query=anything'
  const schema = `snssdk1128://microapp?app_id=${dyAppId}&start_page=${decodeURIComponent(dyPath)}`
  plus.runtime.openURL(schema)
}

/**
 * 跳转微信小程序
 * @param {string} appId 微信小程序 AppId
 * @param {string} path 小程序页面路径
 * @param {string} envVersion develop-开发版，trial-体验版，release-正式版
 */
export function toWxMiniProgram(appId: string, path: string, envVersion: 'develop' | 'trial' | 'release' = 'release') {
  return new Promise((resolve, reject) => {
    uni.navigateToMiniProgram({
      appId,
      path,
      envVersion, // 开发版、体验版、正式版
      success: resolve,
      fail: reject
    })
  })
}
